home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / Unsorted / MiniCalc.AMOS / MiniCalc.amosSourceCode
Encoding:
AMOS Source Code  |  1995-04-22  |  3.1 KB  |  123 lines

  1. Dim ELM#(30),CAL(30),PRI(30),VAR$(30),VAR#(30)
  2. DEZ$="."
  3. Input CAL$
  4. For X=0 To 320
  5.   VAR$(0)="x" : VAR#(0)=X
  6.   Gosub CALC
  7.   Plot X,RES#,1
  8. Next 
  9. End 
  10. CALC:
  11.   R$=Lower$(CAL$)+"="
  12.   COR=0 : ELM=0 : REC=0 : VOZ=1 : NUM=1 : KOM#=1.0
  13.   PRIBAS=0
  14.   For A=1 To Len(R$)
  15.     ER$=""
  16.     A$=Mid$(R$,A,1)
  17.     If COR
  18.       If REC=0
  19.         If A$=")"
  20.           Add PRIBAS,-20
  21.           If PRIBAS<0 : ER$="Too many closing brakets" : End If 
  22.         End If 
  23.         If Instr("+-*:/^=",A$)
  24.           If NUM
  25.             ELM#(ELM)=ELM#(ELM)*VOZ
  26.             VOZ=1
  27.           Else 
  28.             For V=0 To 30
  29.               If Instr(VAR$(V),VAR$)
  30.                 ELM#(ELM)=VAR#(V)
  31.                 Exit 
  32.               End If 
  33.             Next 
  34.             If V=31 : ELM#(ELM)=0 : ER$="Variable not found" : End If 
  35.             ELM#(ELM)=ELM#(ELM)*VOZ
  36.             VOZ=1
  37.           End If 
  38.         End If 
  39.         If A$="+" : CAL(ELM)=1 : End If 
  40.         If A$="-" : CAL(ELM)=1 : VOZ=-VOZ : End If 
  41.         If(A$>="a") and(A$<="z") and NUM=1
  42.           CAL(ELM)=2 : Add PRI(ELM),10
  43.           ELM#(ELM)=ELM#(ELM)*VOZ
  44.           VOZ=1
  45.           Inc ELM : REC=1 : COR=0
  46.         End If 
  47.         If A$="*" : CAL(ELM)=2 : Add PRI(ELM),10 : End If 
  48.         If A$="/" : CAL(ELM)=3 : Add PRI(ELM),10 : End If 
  49.         If A$="^" : CAL(ELM)=4 : Add PRI(ELM),15 : End If 
  50.         If Instr("+-*:/^",A$)
  51.           Inc ELM : REC=1 : COR=0
  52.         End If 
  53.       Else 
  54.         If A$="-" : VOZ=-VOZ : End If 
  55.         If Instr("*:/^",A$) : ER$="Unexpected operand!" : End If 
  56.       End If 
  57.     Else 
  58.       If A$="(" : Add PRIBAS,20 : End If 
  59.       If A$="-" : VOZ=-VOZ : End If 
  60.       If Instr("*:/^",A$) : ER$="Unexpected operand!" : End If 
  61.     End If 
  62.     If(A$>="a" and A$<="z")
  63.       If COR=0
  64.         VAR$=A$ : COR=1 : REC=0 : PRI(ELM)=PRIBAS : NUM=0
  65.       Else 
  66.         VAR$=VAR$+A$
  67.       End If 
  68.     End If 
  69.     If(A$>="0") and(A$<="9")
  70.       If COR=0
  71.         ELM#(ELM)=(Asc(A$)-48) : COR=1 : REC=0 : KOM#=1.0 : PRI(ELM)=PRIBAS
  72.         NUM=1
  73.       Else 
  74.         If NUM=0
  75.           VAR$=VAR$+A$
  76.         Else 
  77.           If KOM#=1.0
  78.             ELM#(ELM)=ELM#(ELM)*10+(Asc(A$)-48)
  79.           Else 
  80.             ELM#(ELM)=ELM#(ELM)+(Asc(A$)-48)/KOM#
  81.             KOM#=KOM#*10.0
  82.           End If 
  83.         End If 
  84.       End If 
  85.     End If 
  86.     If A$=DEZ$
  87.       If NUM
  88.         If KOM#=1.0
  89.           KOM#=10.0
  90.           If COR=0
  91.             ELM#(ELM)=0.0 : COR=1 : REC=0
  92.           End If 
  93.         Else 
  94.           ER$="Decimal point error!"
  95.         End If 
  96.       Else 
  97.         VAR$=VAR$+A$
  98.       End If 
  99.     End If 
  100.     If ER$<>"" Then Print ER$
  101.   Next 
  102.   ELM#(ELM)=ELM#(ELM)*VOZ
  103.   E=ELM
  104.   While ELM>0
  105.     For A=0 To ELM
  106.       If PRI(A)>=PRI(A+1)
  107.         If CAL(A)=1 : ELM#(A)=ELM#(A)+ELM#(A+1) : End If 
  108.         If CAL(A)=2 : ELM#(A)=ELM#(A)*ELM#(A+1) : End If 
  109.         If CAL(A)=3 : ELM#(A)=ELM#(A)/Max(ELM#(A+1),0.001) : End If 
  110.         If CAL(A)=4 : ELM#(A)=ELM#(A)^ELM#(A+1) : End If 
  111.         PRI(A)=0 : CAL(A)=CAL(A+1)
  112.         If A<ELM
  113.           For B=A+1 To ELM
  114.             ELM#(B)=ELM#(B+1) : CAL(B)=CAL(B+1) : PRI(B)=PRI(B+1)
  115.           Next 
  116.         End If 
  117.         Dec ELM
  118.         Exit 
  119.       End If 
  120.     Next 
  121.   Wend 
  122.   RES#=ELM#(0)
  123. Return